package com.cy.pj.sys.service.impl;

import com.cy.pj.common.pojo.Node;
import com.cy.pj.sys.dao.SysMenuDao;
import com.cy.pj.sys.pojo.SysMenu;
import com.cy.pj.sys.service.SysMenuService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Isolation;
import org.springframework.transaction.annotation.Transactional;

import java.util.List;

@Transactional(readOnly = false,////禁止出现脏读,保证性能,拒绝加锁
        rollbackFor = Throwable.class,//事务并发执行,脏读,不可重复读,幻读,
        isolation = Isolation.READ_COMMITTED)//当时间超过60可以设置 抛出异常执行回滚
@Service
public class SysMenuServiceImpl implements SysMenuService {
    @Autowired
    private SysMenuDao sysMenuDao;

//     SysMenuServiceImpl(SysMenuDao sysMenuDao){
//        this.sysMenuDao=sysMenuDao;
//    }
    @Transactional(readOnly = true)
    @Override
    public List<SysMenu> findMenus() {
        //方法一
        return  sysMenuDao.selectMenus();

        //方法二 拓展
        // 在业务中对数据进行封装 ,一级,二级,三级;递归算法
//        List<SysMenu> menus = sysMenuDao.selectMenu()

        //递归算法
//        menus.stream().filter().collect()
    }
    @Transactional(readOnly = true)
    @Override
    public List<Node> findMenuTreeNodes() {
        //方法一
       return sysMenuDao.selectMenuTreeNodes();
        //方法二
        // 在业务中对数据进行封装 ,一级,二级,三级;递归算法


    }

    @Transactional(readOnly = true)
    @Override
    public SysMenu findById(Integer id) {
        return sysMenuDao.selectById(id);
    }

    @Override
    public int saveMenu(SysMenu entity) {
        return sysMenuDao.insertMenu(entity);
    }
    @Override
    public int updateMenu(SysMenu entity) {
        return sysMenuDao.updateMenu(entity);
    }
}
